package org.base.common.exception;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 服务异常
 * <p>
 * 参考 https://www.kancloud.cn/onebase/ob/484204 文章
 * <p>
 * 一共 10 位，分成四段
 * <p>
 * 第一段，1 位，类型
 * 1 - 业务级别异常
 * 2 - 系统级别异常
 * <p>
 * 第二段，3 位，系统类型
 * 001 - 用户系统
 * 002 - 商品系统
 * 003 - 订单系统
 * 004 - 支付系统
 * 005 - 优惠劵系统
 * <p>
 * 第三段，3 位，模块
 * 不限制规则,一般建议，每个系统里面，可能有多个模块，可以再去做分段。以用户系统为例子：
 * 001 - OAuth2 模块
 * 002 - User 模块
 * 003 - MobileCode 模块
 * <p>
 * 第四段，3 位，错误码
 * 不限制规则, 一般建议，每个模块自增。
 */
@Getter
@AllArgsConstructor
public enum ExceptionEnum implements IExceptionInfo {


    // 系统级别
    UNKNOWN(0, "未知错误"),
    OK(1, "成功"),
    ERROR_ARGUMENT(2, "参数错误"),
    ERROR_ARGUMENT_WITH_DESC(3, "%s"),
    ERROR_ARGUMENT_BIND(4, "%s"),
    ERROR_EXIST(5, "%s 已存在"),
    ERROR(6, "%s"),
    ERROR_VERIFICATION_CODE(7, "验证码错误"),

    // 业务级别

    // 用户模块 1001002
    ILLEGAL_AUTH(1001002001, "用户名或密码错误"),
    UN_AUTH(1001002003, "请先登录"),
    UNKNOWN_ACCOUNT(1001002004, "用户名密码不能为空"),
    USERNAME_OR_PASSWORD_ERROR(1001002005, "用户名或密码错误"),
    EXPIRED_TOKEN(1001002006, "登录已失效"),
    ERROR_DELETE_SELF(1001002007, "不能删除自己"),
    USER_DISABLE(1001002008, "用户已被禁用"),
    USER_EXIST(1001002009, "用户名或邮箱或手机已存在"),
    DELETE_ROLE_ERROR(1001002010, "系统用户禁止删除"),
    NO_ACCESS(1001002011, "没有权限访问"),
    FORBID_ACCESS(1001002012, "禁止访问"),
    PASSWORD_ERROR(1001002013, "密码错误");


    private Integer status;

    private String msg;
}
